#pragma once

class CInputMouseEvent;
class CInputKeyEvent;

enum EMouseButtonID
{
    eMouseButtonID_Invalid = -1,
    eMouseButtonID_0 = 0,
    eMouseButtonID_1 = 1,
    eMouseButtonID_2 = 2,
};

enum EKeyboardButtonID
{
    eKeyboardButtonID_Invalid = -1,
    eKeyboardButtonID_Backspace = 0x8,
    eKeyboardButtonID_Tab = 0x9,
    eKeyboardButtonID_Return = 0xD,
    eKeyboardButtonID_Shift = 0x10,
    eKeyboardButtonID_Control = 0x11,
    eKeyboardButtonID_Alt = 0x12,
    eKeyboardButtonID_ESC = 0x1B,
    eKeyboardButtonID_Space = 0x20,
    eKeyboardButtonID_End = 0x23,
    eKeyboardButtonID_Home = 0x24,
    eKeyboardButtonID_Left = 0x25,
    eKeyboardButtonID_Up = 0x26,
    eKeyboardButtonID_Right = 0x27,
    eKeyboardButtonID_Down = 0x28,
    eKeyboardButtonID_Insert = 0x2D,
    eKeyboardButtonID_Delete = 0x2E,

    eKeyboardButtonID_0 = 0x30,
    eKeyboardButtonID_1,
    eKeyboardButtonID_2,
    eKeyboardButtonID_3,
    eKeyboardButtonID_4,
    eKeyboardButtonID_5,
    eKeyboardButtonID_6,
    eKeyboardButtonID_7,
    eKeyboardButtonID_8,
    eKeyboardButtonID_9,

    eKeyboardButtonID_A = 0x41,
    eKeyboardButtonID_B,
    eKeyboardButtonID_C,
    eKeyboardButtonID_D,
    eKeyboardButtonID_E,
    eKeyboardButtonID_F,
    eKeyboardButtonID_G,
    eKeyboardButtonID_H,
    eKeyboardButtonID_I,
    eKeyboardButtonID_J,
    eKeyboardButtonID_K,
    eKeyboardButtonID_L,
    eKeyboardButtonID_M,
    eKeyboardButtonID_N,
    eKeyboardButtonID_O,
    eKeyboardButtonID_P,
    eKeyboardButtonID_Q,
    eKeyboardButtonID_R,
    eKeyboardButtonID_S,
    eKeyboardButtonID_T,
    eKeyboardButtonID_U,
    eKeyboardButtonID_V,
    eKeyboardButtonID_W,
    eKeyboardButtonID_X,
    eKeyboardButtonID_Y,
    eKeyboardButtonID_Z,

    eKeyboardButtonID_Slash = 0xbf,

    eKeyboardButtonID_Multiply = 0x6a,
};

class IInputListener
{
public:
    virtual void OnKeyboardAcquired() = 0;
    virtual void OnMouseAcquired() = 0;
    virtual void MouseMoved(int xDelta, int yDelta, int zDelta) = 0;
    virtual void MousePressed(EMouseButtonID eMouseButtonID) = 0;
    virtual void MouseReleased(EMouseButtonID eMouseButtonID) = 0;
    virtual void KeyPressed(EKeyboardButtonID eKeyboardButtonID) = 0;
    virtual void KeyReleased(EKeyboardButtonID eKeboardButtonID) = 0;
};
